package edu.se.jai.dubboapi.service;

import edu.se.jai.dubboapi.proto.GameServiceProto.*;

/**
 * 游戏服务 Dubbo API 接口定义
 *
 * 使用 Triple 协议和 Protobuf 序列化
 * - 服务提供方（game-service）实现此接口
 * - 服务消费方（websocket-gateway）通过此 Dubbo 服务调用
 */
public interface GameServiceApi {

    // ==================== 玩家管理接口 ====================

    /**
     * 注册玩家会话
     */
    Result registerPlayer(RegisterPlayerRequest request);

    /**
     * 清除玩家信息
     */
    Result clearPlayer(SessionRequest request);

    // ==================== 房间管理接口 ====================

    /**
     * 创建房间
     */
    Result createRoom(SessionRequest request);

    /**
     * 加入房间
     */
    Result joinRoom(SessionRoomRequest request);

    /**
     * 离开房间
     */
    Result leaveRoom(SessionRoomRequest request);

    /**
     * 解散房间
     */
    Result dissolveRoom(SessionRoomRequest request);

    /**
     * 获取所有房间列表
     */
    Result getAllRooms(AllRoomsRequest request);

    /**
     * 根据会话ID获取所在房间
     */
    Result getRoomBySessionId(SessionRequest request);

    /**
     * 根据房间ID获取房间
     */
    Result getRoomById(RoomIdRequest request);

    // ==================== 游戏逻辑接口 ====================

    /**
     * 开始游戏
     */
    Result startGame(SessionRoomRequest request);

    /**
     * 停止游戏
     */
    Result stopGame(SessionRoomRequest request);

    /**
     * 猜测数字
     */
    Result makeGuess(GuessDto request);
}

